﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AirTickets
{
    public class Operaciones
    {
        public static List<Vuelo> BuscarVuelos(string origen, string destino, DateTime fecha)
        {
            ListaDeVuelos vuelos = new ListaDeVuelos();

            List<Vuelo> vuelosDisponibles = (from v in vuelos
                                             where v.SirvePara(origen, destino, fecha)
                                             select v).ToList<Vuelo>();
            return vuelosDisponibles;
        }

        public Billete ObtenerBillete(string codigoVuelo)
        {
            ListaDeVuelos vuelos = new ListaDeVuelos();
            Vuelo v = vuelos.First(x => x.Codigo == codigoVuelo);
            if (v == null)
                throw new Exception("Vuelo no encontrado");
            Billete b = new Billete(v);
            return b;
        }

        public static Billete ObtenerBillete(string codigoVuelo, string codigoAsiento)
        {            
            ListaDeVuelos vuelos = new ListaDeVuelos();
            Vuelo v = vuelos.First(x => x.Codigo == codigoVuelo);
            if (v == null)
                throw new Exception("Vuelo no encontrado");
            Billete b = new Billete(v);
            b.Asiento = v.AsientosDisponibles().First(a => a.Descriptor == codigoAsiento);
            return b;
            
        }

        public static List<Asiento> AsientosDisponibles(string codigoVuelo)
        {
            Vuelo v = (new ListaDeVuelos()).Single(x=>x.Codigo==codigoVuelo);
            if (v != null)
                return v.AsientosDisponibles();
            else 
                return new List<Asiento>();
        }

        public static void Reservar(string codigoVuelo, string codigoBillete)
        {
            ListaDeVuelos vuelos = new ListaDeVuelos();
            Vuelo v = vuelos.First(x => x.Codigo == codigoVuelo);
            if (v == null)
                throw new Exception("Vuelo no encontrado");

            Billete b = v.Billetes.First(x => x.Codigo == codigoBillete);
            if(b==null)
                throw new Exception("Billete no encontrado");

            b.Reservar();

        }
       
    }
}
